package com.zzedu.integration.yzs.vo;

import java.util.List;

/**
 * 评测结果根对象
 */
public class YzsEvaluationResult {

    /**
     * 结果格式版本及版本号，例如："full 1.0"
     */
    private String version;

    /**
     * 总评分（字符串类型）
     */
    private String score;

    /**
     * 评测类型：general（朗读评测）、askandanswer（情景问答）、composition（作文）
     */
    private String EvalType;

    /**
     * 每行输入文本的评测结果
     */
    private List<Line> lines;

    /**
     * 句式标准文本（数组）
     */
    private List<String> sentSample;

    /**
     * 句式总分（数组）
     */
    private List<Double> sentScore;

    /**
     * 句式标准度得分（数组）
     */
    private List<Double> sentPronunciation;

    /**
     * 句式流利度得分（数组）
     */
    private List<Double> sentFluency;

    /**
     * 句式完整度得分（数组）
     */
    private List<Double> sentIntegrity;

    /**
     * 关键词sample（包括关键词和每个关键词的得分）
     */
    private List<String> keySample;

    /**
     * 关键词总分（数组）
     */
    private List<Double> keysScore;

    /**
     * 关键词标准度得分（数组）
     */
    private List<Double> keysPronunciation;

    /**
     * 关键词完整度得分（数组）
     */
    private List<Double> keysIntegrity;

    /**
     * 关键词流利度（数组）
     */
    private List<Double> keysFluency;

    /**
     * 客户定制，输出的分制，当前含有4分制和8分制
     */
    private String standardScore;

    /**
     * 句子重读信息，每个单词都输出：
     * 0：该单词没有被重读；
     * 1：该单词被重读
     */
    private String StressOfSent;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }

    public String getEvalType() {
        return EvalType;
    }

    public void setEvalType(String evalType) {
        EvalType = evalType;
    }

    public List<Line> getLines() {
        return lines;
    }

    public void setLines(List<Line> lines) {
        this.lines = lines;
    }

    public List<String> getSentSample() {
        return sentSample;
    }

    public void setSentSample(List<String> sentSample) {
        this.sentSample = sentSample;
    }

    public List<Double> getSentScore() {
        return sentScore;
    }

    public void setSentScore(List<Double> sentScore) {
        this.sentScore = sentScore;
    }

    public List<Double> getSentPronunciation() {
        return sentPronunciation;
    }

    public void setSentPronunciation(List<Double> sentPronunciation) {
        this.sentPronunciation = sentPronunciation;
    }

    public List<Double> getSentFluency() {
        return sentFluency;
    }

    public void setSentFluency(List<Double> sentFluency) {
        this.sentFluency = sentFluency;
    }

    public List<Double> getSentIntegrity() {
        return sentIntegrity;
    }

    public void setSentIntegrity(List<Double> sentIntegrity) {
        this.sentIntegrity = sentIntegrity;
    }

    public List<String> getKeySample() {
        return keySample;
    }

    public void setKeySample(List<String> keySample) {
        this.keySample = keySample;
    }

    public List<Double> getKeysScore() {
        return keysScore;
    }

    public void setKeysScore(List<Double> keysScore) {
        this.keysScore = keysScore;
    }

    public List<Double> getKeysPronunciation() {
        return keysPronunciation;
    }

    public void setKeysPronunciation(List<Double> keysPronunciation) {
        this.keysPronunciation = keysPronunciation;
    }

    public List<Double> getKeysIntegrity() {
        return keysIntegrity;
    }

    public void setKeysIntegrity(List<Double> keysIntegrity) {
        this.keysIntegrity = keysIntegrity;
    }

    public List<Double> getKeysFluency() {
        return keysFluency;
    }

    public void setKeysFluency(List<Double> keysFluency) {
        this.keysFluency = keysFluency;
    }

    public String getStandardScore() {
        return standardScore;
    }

    public void setStandardScore(String standardScore) {
        this.standardScore = standardScore;
    }

    public String getStressOfSent() {
        return StressOfSent;
    }

    public void setStressOfSent(String stressOfSent) {
        StressOfSent = stressOfSent;
    }

    public List<Double> getTone() {
        return tone;
    }

    public void setTone(List<Double> tone) {
        this.tone = tone;
    }

    public List<AudioCheck> getAudiocheck() {
        return audiocheck;
    }

    public void setAudiocheck(List<AudioCheck> audiocheck) {
        this.audiocheck = audiocheck;
    }

    public static class Line {
        /**
         * 输入的标准文本
         */
        private String sample;

        /**
         * 用户实际朗读的文本（语音识别结果）
         */
        private String usertext;

        /**
         * 开始时间，单位为秒
         */
        private Double begin;

        /**
         * 结束时间，单位为秒
         */
        private Double end;

        /**
         * 分值
         */
        private Double score;

        /**
         * 流利度得分
         */
        private Double fluency;

        /**
         * 录入语音的完整度
         */
        private Double integrity;

        /**
         * 录入语音的标准度
         */
        private Double pronunciation;

        /**
         * 每个词的评测结果
         */
        private List<Word> words;

        public String getSample() {
            return sample;
        }

        public void setSample(String sample) {
            this.sample = sample;
        }

        public String getUsertext() {
            return usertext;
        }

        public void setUsertext(String usertext) {
            this.usertext = usertext;
        }

        public Double getBegin() {
            return begin;
        }

        public void setBegin(Double begin) {
            this.begin = begin;
        }

        public Double getEnd() {
            return end;
        }

        public void setEnd(Double end) {
            this.end = end;
        }

        public Double getScore() {
            return score;
        }

        public void setScore(Double score) {
            this.score = score;
        }

        public Double getFluency() {
            return fluency;
        }

        public void setFluency(Double fluency) {
            this.fluency = fluency;
        }

        public Double getIntegrity() {
            return integrity;
        }

        public void setIntegrity(Double integrity) {
            this.integrity = integrity;
        }

        public Double getPronunciation() {
            return pronunciation;
        }

        public void setPronunciation(Double pronunciation) {
            this.pronunciation = pronunciation;
        }

        public List<Word> getWords() {
            return words;
        }

        public void setWords(List<Word> words) {
            this.words = words;
        }

        public static class Word {
            /**
             * 单词重音，将用户发音和词典的重音位置做比较：
             * 0：该单词重音朗读错误；
             * 1：该单词重音朗读正确
             */
            private String StressOfWord;

            /**
             * 音标
             */
            private String phonetic;

            /**
             * 单词或音素文本
             */
            private String text;

            /**
             * 类型，共有6种类型：
             * 0 多词：仅B，C，G模式出现，当朗读内容大于文本内容时，多余的单词type值为0；
             * 1 漏词：所有模式都有，当朗读内容小于文本内容时，未读的单词type值为1；
             * 2 正常词：所有模式都有，识别正常的词；
             * 3 错误词：仅B，C，G模式出现，当朗读的文本某个单词识别成文本中其他单词时，该单词type值为3；
             * 4 静音：所有模式；
             * 5 重复词：预留接口，未实现；
             * 7 空格or标点：仅E模式，空格和标点的结构type值为7；
             * 8 生词：所有模式
             */
            private Integer type;

            /**
             * 开始时间，单位为秒
             */
            private Double begin;

            /**
             * 结束时间，单位为秒
             */
            private Double end;

            /**
             * 音量
             */
            private Double volume;

            /**
             * 分值
             */
            private Double score;

            /**
             * 包含单词的音标、开始时间、结束时间、分数、音量信息
             */
            private List<Subword> subwords;

            public String getStressOfWord() {
                return StressOfWord;
            }

            public void setStressOfWord(String stressOfWord) {
                StressOfWord = stressOfWord;
            }

            public String getPhonetic() {
                return phonetic;
            }

            public void setPhonetic(String phonetic) {
                this.phonetic = phonetic;
            }

            public String getText() {
                return text;
            }

            public void setText(String text) {
                this.text = text;
            }

            public Integer getType() {
                return type;
            }

            public void setType(Integer type) {
                this.type = type;
            }

            public Double getBegin() {
                return begin;
            }

            public void setBegin(Double begin) {
                this.begin = begin;
            }

            public Double getEnd() {
                return end;
            }

            public void setEnd(Double end) {
                this.end = end;
            }

            public Double getVolume() {
                return volume;
            }

            public void setVolume(Double volume) {
                this.volume = volume;
            }

            public Double getScore() {
                return score;
            }

            public void setScore(Double score) {
                this.score = score;
            }

            public List<Subword> getSubwords() {
                return subwords;
            }

            public void setSubwords(List<Subword> subwords) {
                this.subwords = subwords;
            }
        }

        public static class Subword {
            /**
             * 音标或重音符号信息
             */
            private String subtext;

            /**
             * 音量
             */
            private Double volume;

            /**
             * 开始时间，单位为秒
             */
            private Double begin;

            /**
             * 结束时间，单位为秒
             */
            private Double end;

            /**
             * 分值
             */
            private Double score;

            public String getSubtext() {
                return subtext;
            }

            public void setSubtext(String subtext) {
                this.subtext = subtext;
            }

            public Double getVolume() {
                return volume;
            }

            public void setVolume(Double volume) {
                this.volume = volume;
            }

            public Double getBegin() {
                return begin;
            }

            public void setBegin(Double begin) {
                this.begin = begin;
            }

            public Double getEnd() {
                return end;
            }

            public void setEnd(Double end) {
                this.end = end;
            }

            public Double getScore() {
                return score;
            }

            public void setScore(Double score) {
                this.score = score;
            }
        }
    }

    /**
     * 音质检测结果
     */
    public static class AudioCheck {
        /**
         * 音量过小的置信度（0或10）
         */
        private Integer volume;

        /**
         * 截幅的置信度（0或10）
         */
        private Integer clipping;

        /**
         * 噪音过大的置信度（0或10）
         */
        private Integer noise;

        /**
         * 截断的置信度（0或10）
         */
        private Integer cut;

        /**
         * 是否音频过短
         */
        private Boolean tooShort;

        /**
         * 是否是空音频
         */
        private Boolean emptyAudio;

        public Integer getVolume() {
            return volume;
        }

        public void setVolume(Integer volume) {
            this.volume = volume;
        }

        public Integer getClipping() {
            return clipping;
        }

        public void setClipping(Integer clipping) {
            this.clipping = clipping;
        }

        public Integer getNoise() {
            return noise;
        }

        public void setNoise(Integer noise) {
            this.noise = noise;
        }

        public Integer getCut() {
            return cut;
        }

        public void setCut(Integer cut) {
            this.cut = cut;
        }

        public Boolean getTooShort() {
            return tooShort;
        }

        public void setTooShort(Boolean tooShort) {
            this.tooShort = tooShort;
        }

        public Boolean getEmptyAudio() {
            return emptyAudio;
        }

        public void setEmptyAudio(Boolean emptyAudio) {
            this.emptyAudio = emptyAudio;
        }
    }

    /**
     * 发音曲线数据（内部使用）
     */
    private List<Double> tone;

    /**
     * 音质检测结果
     */
    private List<AudioCheck> audiocheck;


}